








































































                           Implementation Manual for
                            YAM (Yet Another Modem)
                               by Chuck Forsberg


                            Distributed with YAMC86
                       (Converted for CI C86 and CP/M-86)
                                by Paul Homchick



















































     Yam Implementation Manual  Revised 9-10-83                      Page 1


          
          


     1  FILE TRANSFER PROTOCOL  
     1. FILE TRANSFER PROTOCOL 

          The  transmission  of  pathnames  in batch mode differs from
          that used in MODEM7.  Yam  sends  the  pathname  as  a  null
          terminated string in a standard Ward Christensen type packet 
          with a sector number of 0.  
          
          The  sender  may append the following additional information
          starting  one  byte  after  the  null  that  terminates  the
          pathname: 
          
          sprintf(p, "%lu %lo %o", f.st_size, f.st_mtime, f.st_mode); 
          
          where  st_size  is  the  exact  length of the file in bytes,
          st_mtime is the modification date in seconds since 1970, and 
          st_mode is the file mode, as defined for Unix V7/Sys3.    If
          the  mod  time  is  unavailable,  a  0  value will cause the
          receiver to ignore it.  If the file mode is unavailable, a 0 
          value will cause the receiver to ignore it and use a dafault 
          file mode.  
          
          Disk specifiers (B:) are not sent.  Directory names of  full
          pathnames are  not  (generally)  sent.   If this information
          (including the trailing null provided  by  sprintf)  exceeds
          the  128  byte standard sector length, a long sector must be
          sent.  
          
          The sender waits for  an  initial  NAK  before  sending  the
          pathname.   An  explicit  NAK  is  sent  by  the receiver at
          intervals when  is  ready  to  receive  a  pathname.    Upon
          receiving   and   acknowledging  the  pathname  packet,  the
          receiver opens the file and then sends the initial  NAK  for
          the data  in  the  file.    A null pathname terminates batch
          transmission.  
          
          The remainder of the pathname sector is set to nulls.  
          


     2  Installing Yam  
     2. Installing Yam 

          
          Yam   consists   of   yam.h,   yamsys.h,    yam8.asm,    and
          yam[1235710].c.   Yam  currently  supports the Z89 (with aux
          board), Cromemco TUART, TRS-80 II, and Apple (currently with 
          Z19 console).  
          
          Yamsys.h is  not  part  of  the  distribution;  one  of  the
          configuration  dependent header files is copied to yamsys.h.
          SOME of these files are: Yamz89.h is used for Z89  computers
          (check  the port definitions to be sure they agree with your
          usage.) Yamtuart.h is  setup  for  a  TUART  board  at  60H.
          Yamz89xm.h  describes  an XMODEM configuration with the Z89.
          Yamtrsii.h describes a TRS-80 Mod II.  One of these (Or  one


     YAM/XYAM                     Version 4.24                       Page 1


     Yam Implementation Manual  Revised 9-10-83                      Page 2


          you  write  for  your  system)  should be copied to yamsys.h
          before compiling the files.  
          
          YAM also references some of  the  definitions  in  BDSCIO.H.
          When  cross-compiling  a  version  of  yam  for  a different
          system, be sure to reference a bdscio.h  file  suitable  for
          the target  system.    Alternatively, one might #undef CDATA
          and any other definitions which otherwise would  speak  with
          forked tongue; YAMLYLE.Hwill be an example of this trick.  
          
          Starting  with  Version 3.08 there will be multiple versions
          of yam5.c depending on the target system.  There  have  been
          few  changes  to yam5.c (except for porting to new systems),
          so you should be fairly safe  hanging  on  to  your  current
          version.   If  you do have a special version of yam5, please
          edit out ALL code and comments not directly relevant to your 
          application (including the unused versions of  readline)  to
          minimize  storage  space  and  transmission time for RCP/M's
          archiving yam.  
          
          Compilation should be with -e ????  for all files and -o for 
          yam[235] and yam10 for best runtime performance.  Note  that
          yam[147]  are  NOT  compiles with -o; the execution speed of
          the functions in these  files  is  unimportant,  and  it  is
          better to save code space by not using -o.  Consult the .sub 
          files for examples.  If the externals start below the end of 
          code,  YAM  will  say "urk" and exit, hopefully before doing
          anything REALLY nasty.  
          
          Yam should be linked with the object module with the largest 
          set of "local globals" first.  Currently, this is in  yam10.
          These  variables  overlay  similar  variables  in some other
          files.  They are not required simultaneously, but the linker 
          must  see  the  largest  common  area  first   to   allocate
          sufficient room  for  them.   (N.B.: I do not recommend this
          hack as a general method!) 
          
          Care should be taken to  ensure  that  all  .crl  files  are
          compiled  or  assembled  with compatible versions of cc1 and
          bds.lib.  
          
          Yam can be made somewhat smaller if the -o is left  out  and
          the external  address is downsized accordingly.  To make the
          smallest YAM possible, define CDOS and RESTRICTED  and  then
          leave off as many optional #defines as possible.  The bdsnew 
          library   (assembly   language  versions  of  some  standard
          functions) may be used with slight improvments in code  size
          and speed.    (Bdsnew  library  is  named bn.crl in the .SUB
          files used for yam.) 
          
          YAM  is  handy  for  transferring  files  between   directly
          connected  machines;  hence  all the attention to high speed
          operation.  
          
          If your machine uses a different type of  UART  chip,  or  a
          built-in modem card, then the yamsys.h and yam5.c files will 
          need work.  
          


     YAM/XYAM                     Version 4.24                       Page 2


     Yam Implementation Manual  Revised 9-10-83                      Page 3


          Compilation and proper operation of YAM cannot be guaranteed 
          with  BDS  C versions prior to 1.50a. If you don't have that
          version, send 8 (maybe more now!) bucks and a copy  of  your
          software  license (a Xerox of your distribution disk showing
          its label should do) to: 
          		BDS C Users Group
          		Robert Ward
          		Dedicated Microsystems Inc
          		409 E Kansas ST
          		Yates Center, Kansas 66783
          Versions before 1.46 are a no-no.  
          


     3  PROPAGATING YAM  
     3. PROPAGATING YAM 

          
          Often the question arises, "How do I get YAM  (or  whatever)
          into this neat new machine with the *%!@$@ format disks?  
          

          3 1 Binary Serial File Transfer  
          3.1 Binary Serial File Transfer 
          The b  mode was put in just for you!  First, cross-compile a
          version of YAM with a  yamsys.h  file  appropriate  for  the
          target machine.   Then, connect the two machines RS232 ports
          together, and initialize those ports so they  talk  to  each
          other.  Presumably, YAM is running on the host machine.  Now 
          run  ddt,  sid,  zsid,  dcon,  or  whatever and write a tiny
          program up in fairly high memory (above the highest  address
          used by YAM, say 7000h).  
          
          This program will: 


            Set HL to 100h  
            Set HL to 100h 

            Wait for UART for data available  
            Wait for UART for data available 

            Input  data  from  UART   Note   UART must be in 8 bit  no 
            Input  data  from  UART  (Note:  UART must be in 8 bit, no
                parity mode   
                parity mode) 

            Store data to memory  mov m a   
            Store data to memory (mov m,a) 

            Increment HL  
            Increment HL 

            Jump to 2 above    
            Jump to 2 above.  
          
          When the file is all sent, interrupt the  program,  jump  to
          location 0.   Then  you  can  save  YAM.COM.    If you can't
          interrupt this program without blowing it away, you'll  have
          to  change  it  to detect the end of data (perhaps count the
          number of bytes received in the DE register)  and  make  the
          program jump to location 0.  
          

          3 2 Hex File Transfer  
          3.2 Hex File Transfer 
          Another  possibility  would  be to unload the yam-target.com
          image into a hex file ( UNLOAD2.ASM works fine ).  Then  run


     YAM/XYAM                     Version 4.24                       Page 3


     Yam Implementation Manual  Revised 9-10-83                      Page 4


          pip  in  the  target machine with input from the serial port
          and output to a file using pip's B parameter.   With  the  B
          parameter, pip buffers incoming data in memory until an XOFF 
          (Control-S) is  received.    To get that, send the file from
          the host with "yam f file.hex" and from time to time hit two 
          ^S's on the host keyboard.  The first ^S stops the transfer, 
          the second will be passed to the  other  machine  where  pip
          will see  it.   When pip has written out the buffer, type ^Q
          on the host to resume.  (Be sure to  stop  often  enough  so
          pip's buffer doesn't overflow.) (With pip, go slow -300 baud 
          is much better then typing it in by hand!) Finally, load the 
          file with  the  target  system's load command.  Also, if the
          target system is echoing characters (TTY: input device)  the
          FE file command may be easier to use.  
          
          If   the  target  system  echos  characters,  use  the  ``fe
	  filename'' command  which waits for an answering echo before
	  sending the next  character.  If that doesn't work properly,
          try ``ft'',  slowing down the transfer with the t mode.  
          
          Once you have a working yam running on target machine, other 
          files come across effortlessly with the batch file  transfer
          option.  
          
          Happy propagation and may your machines trap fertile YAM's.  
          


     4  Important  define s  
     4. Important #define's 

          


            MODOUT c                                                    
            MODOUT(c) This outputs the character c to the modem.  This 
                macro  need not check whether the modem is ready for a
                character as that has already been  done.    MODOUT(c)
                must return immeadiately regardless of what is in c.  
                

            LPOUT c                                                    
            LPOUT(c)  Likewise,  unadorned output of c to the printer.
                LPOUT(c) must return immeadiately regardless  of  what
                is in c.  
                

            POREADY                                                    
            POREADY  This  define returns non zero if the line printer
                is ready to accept a character.  It must always return 
                0 if LPOUT(c)  would  not  return  immeadiately.    If
                POREADY  is  slow,  enabling  the printer at high baud
                rates may cause characters to be lost.  
                

            TTYOUT c                                                    
            TTYOUT(c) Unadorned output of c to the local display.  YAM 
                checks  that  the  local  display  is   ready   before
                executing TTYOUT(c).        TTYOUT(c)    must   return
                immeadiately regardless of what is  in  c.    Caution:
                don't  use bdos function 6 which has special cases for
                0xFE and 0xFF.  
                


     YAM/XYAM                     Version 4.24                       Page 4


     Yam Implementation Manual  Revised 9-10-83                      Page 5


            CICHAR                                                     
            CICHAR Unadorned unconditional console input.   This  must
                not  trap  on  any  control characters needed for host
                communications.  
                

            MYSYSTEM                                                   
            MYSYSTEM Defining this causes yam2 to be compiled  with  a
                call  to yam4.c for handling the Compuserve A protocol
                for file transfer (see 2 mode).  Unless you know  what
                you are doing, you should use the following even if it 
                is  a  bloody  lie  as xftran may not accept something
                original.  If this is included, you will need  yam4.c,
                otherwise not.  
                
                #define MYSYSTEM "#CPMHeath/Zenith,CC,HC,PA,PL\015" 
                
                

            KBDBRK                                                      
            KBDBRK This defines the keyboard character that translates 
                to a  break in yam3.  It should not be a normally used
                character.  
                

            FNXEXT                                                     
            FNXEXT   This   character   unconditionally   exits   term
                function.  Normally, this is defined only if a special 
                function  key  is  available  as  that  code cannot be
                transmitted.  If FNXEXT is  defined,  FNXREP  (replot)
                must also be defined.  
                

            ANSWERBACK                                                 
            ANSWERBACK  This  string is transmitted from term function
                in Q mode in response to keyboard ^F  or  ^E  received
                from remote.    Conventionally, ANSWERBACK consists of
                "\\r\\n<phone-number> <user  name>  <city>\\r\\n\\021"
                where  city  is  a  three  or four letter abbreviation
                specified  by   Western   Union   Telegraph   company.
                Teletype  answerbacks  are limited to 20 characters, a
                limitation which needn't concern us.  
                

            PHONES                                                     
            PHONES This file (usually "A:YAMPHONE.T") contains a  list
                of names,  phone  numbers,  and  baudrates.  The names
                must be in lower case.  
                

            HELPFILE                                                   
            HELPFILE Contains a short summary of  commands  and  other
                useful  information  about  YAM suitable for use as an
                online cribsheet.  Currently a  helpfile  exists  only
                for XYAM.  
                

            CDOS                                                       
            CDOS  Makes  YAM work on CDOS operating system by deleting
                CP/M 2.2 operations such  as  user  number,  calculate
                file length,  etc.    If  you have CP/M 1.4, CDOS just
                might do the trick for you.  Since my Cromenco  system
                has refused to work for the batter part of a year now, 
                there  is  an  excellent chance yam won't compile with
                CDOS defined.  In addition, newer versions  of  BDS  C
                require  the  CP/M  2  features, and yam won't compile


     YAM/XYAM                     Version 4.24                       Page 5


     Yam Implementation Manual  Revised 9-10-83                      Page 6


                with earlier versions.  So there.  
                

            KBMASK                                                     
            KBMASK  This  is  normally  0177  to  strip  parity   from
                keyboarded characters, but may be 0377 if a full 8 bit 
                keyboard is used.  
                

            USERINIT                                                   
            USERINIT  Causes  init()  to call a user supplied function
                userinit().  This may be  used  to  set  up  interrupt
                vectors, global variables, etc.  Note that userinit is 
                called in response to the init command.  
                

            USEREXIT                                                   
            USEREXIT  Defining this causes a call to userexit() before
                any normal exit() call.  If userinit() has  ``stolen''
                something  from  the  operating  system,  (such  as an
                interrupt  vector)  userexit  should  ``return''   it.
                Since  yam is often exited with control C, that should
                be trapped also.  
                

            TERMREPLOT                                                 
            TERMREPLOT A string enclosed in quotes  which  clears  the
                screen  and  sets  the terminal to the mode desireable
                for replot.  Replot assumes that TERMREPLOT turns  off
                line wraparound.  
                

            TERMRESET                                                  
            TERMRESET  A  string  enclosed  in  quotes  which sets the
                terminal to the mode desireable for the term  function
                and clears  the  status  line  (if  any).  This string
                should not clear  the  screen.    It  should  set  the
                terminal  in the mode(s) expected by  vi or other host
                based screen editors with which YAM is to be used.  In 
                particular, special effects  (if  any)  of  TERMREPLOT
                should be negated.  
                

            TERMINIT                                                    
            TERMINIT This string should unconditionally initialize and 
                clear the screen.  
                

            CLEARS                                                     
            CLEARS  String to clear the screen and home cursor without
                changing modes.  
                

            CLEARL                                                     
            CLEARL String to return cursor to left  margin  and  clear
                the current  line.    If the "clear line" command does
                not return the  cursor,  a  carriage  return  must  be
                included in this string.  
                

            INTOREV                                    
            INTOREV String to turn on reverse video.  
                

            OUTAREV                                     
            OUTAREV String to turn off reverse video.  
                



     YAM/XYAM                     Version 4.24                       Page 6


     Yam Implementation Manual  Revised 9-10-83                      Page 7


            RXNONO                                                      
            RXNONO Define this as a string of characters, any of which 
                would  cause  your  terminal and/or cbios grief if not
                suppressed by term function.  
                

            STATLINE                                                   
            STATLINE Define this if your terminal has an extra  (viz.,
                25th)  line  usable  for status information which does
                not scroll up nor interfere with scrolling.   lpstat()
                writes  to  the  entire  status line, clearing out any
                previous contents.  pstat()  writes  starting  at  the
                48th  position, not disturbing any information written
                by lpstat().  
                

            T4014                                            
            T4014 Special code for storage tube terminals.  
                

            NOSCROLL                                                    
            NOSCROLL Special considerations for terminals which do not 
                scroll, such as storage tube terminals.  
                

            MODEMSTUFF                                                 
            MODEMSTUFF If you provide routines setbaud(),  readbaud(),
                bye(),  and onhook(), define MODEMSTUFF to exclude the
                default dummy routines.  
                

            AUTODIAL                                                   
            AUTODIAL If your modem supports autodial, write  your  own
                version  of dial() and define AUTODIAL to suppress the
                default routine.  
                

            FLIP                                                       
            FLIP If you have a flip() subroutine in  your  yam5,  this
                causes flip   to  be  included  as  a  command.    See
                yam5pmmi.c for an example of a flip routine.  
                

            MIERROR                                                    
            MIERROR If your uart has a  separate  register  for  error
                bits   (not  the  register  that  holds  receive  data
                available), mierror  should  be  an  expression  which
                returns non zero in case of overrun, framing, or other 
                error, but  not  carrier  dropout.    This  version of
                readline has not been tested.  
                

            MIREADYERROR                                               
            MIREADYERROR Define this if data available and  the  error
                bits  are  in the same register, especially if reading
                that register clears some error bits, or if the  error
                bits are valid only if data available.  
                

            IOTYPE                                                     
            IOTYPE  This  defaults to char for i/o mapped systems with
                256 ports.  This may be defined to  unsigned  or  long
                for  systems  with  more  ports (8086 or memory mapped
                i/o).  
                

            Z19                                                        
            Z19 Generates output for Z19 functions, especially  status
                (25th) line.  


     YAM/XYAM                     Version 4.24                       Page 7


     Yam Implementation Manual  Revised 9-10-83                      Page 8


                

            USQ                                                        
            USQ  Allows  the  type  command to automatically recognize
                squeezed files and display them in ASCII form.    Adds
                1000 hex to program size.  
                

            RXLOG                                                      
            RXLOG  Log  all  files  received  from  remote  systems in
                RXLOG.  Information stored includes user number, disk, 
                filename, baudrate, and the name of the remote  system
                given in the last call command (LASTCALR in xyam).  
                

            TXLOG                                                      
            TXLOG  Log  all  files  transmitted  to  remote systems in
                TXLOG.  Information same as above.  
                

            LOGFILE                                               
            LOGFILE Must be defined if either of the above are.  
                

            NATHAN                                                      
            NATHAN Students of American History will recall the famous 
                patriot Nathan Hale who said "I regret that I have but 
                one asterisk for my country."  Octal code 052.  
          


     5  Tuning Parameters  
     5. Tuning Parameters 

          Yam uses a number of tuneable  parameters  for  portability.
          The  values  used  depend strongly on the speed of functions
          and operating system calls used to interrogate the  keyboard
          and modem  port.   They are also affected by the clock speed
          and code quality of the compilier used.    These  parameters
          have  been  added  on a somewhat ad hoc basis, so one should
          grep the source files  to  determine  the  extent  of  their
          effects.  
          

                

            CLKMHZ                                                     
            CLKMHZ This   is  a  ``master''  parameter.    Use  it  to
                calibrate  the  timeout  in  readline  (see  yam5   or
                equivalent).  
                

            MOMCAL                                                      
            MOMCAL Should give a delay (see yam3) as short as possible 
                while   still   allowing   the   user  to  comfortably
                double-stroke control-E or control-V.  
                

            SCREAMER n                                                  
            SCREAMER n Compiles a call to yterm() instead of term() if 
                baudrate > n and no special modes have been set  which
                would be  rendered  useless.    Without yterm, maximum
                baudrate may be limited to much less than 9600.  Yterm 
                is written in assmebly language and must  be  modified
                slightly    according    to    the    local   hardware
                configuration.  The yterm function is in yam9.csm.  
                


     YAM/XYAM                     Version 4.24                       Page 8


     Yam Implementation Manual  Revised 9-10-83                      Page 9


                
                Note: if you miss only the first few characters  in  a
                line,  and  if  your  system  has memory mapped video,
                screamer won't help you much; you need to speed up the 
                scrolling process!  Note  that  yterm  lacks  much  of
                term's functionality.    On  a  Z89  with  direct bios
                keyboard  input,  yterm  functions   at   19200   baud
                (assuming 19kb crt port!).  
                

            KBDNOW             !                                       
            KBDNOW  This  forces  term  function  to  interrogate  the
                keyboard each time a character  is  displayed  to  the
                console rather than when there are no modem characters 
                waiting to   be   displayed.     With  computers  with
                interrupt-buffered  modem  ports,  this  #define  will
                allow  the  keyboard to always get a word in edgewise.
                It is not recommended otherwise.  
                

            ESCCAL                                                     
            ESCCAL Many terminals send escape  sequences  for  certain
                keys.   In  some  configurations, these sequences will
                fail to transmit properly because the  modem  (300  or
                1200  baud)  cannot transmit the characters as fast as
                the terminal generates them.  I ESCCAL is defined, yam 
                will check for rapid escape sequences and  buffer  the
                following characters.    ESCCAL  should  be set to the
                lowest number (shortest delay) that will recognize the 
                sequences.  This logic is not needed if  the  keyboard
                is interrupt driven.  This feature may not work if the 
                remote  is  sending  data at maximum speed the instant
                the function key is used.  For more information, study 
                the functions on yam3.c that  reference  abptr  and/or
                abend.  
                

            LOWWATER                                                   
            LOWWATER  When  receiving  text  from  the  host  in  term
                function, term transmits  XOFF  (DC3)  when  the  free
                buffer  space gets down to LOWATER, unless Jovemode is
                set.  
                

            LINKPORT                                                   
            LINKPORT Causes  compilation  of  code  to  implement  the
                ``link'' command.    See ``ymlink.h'' for typical link
                parameters.  

            LHPORT                                                     
            LHPORT Local Host port to use for local host  during  link
                command.  

            LIDPORT                                     
            LIDPORT Modem data port for link command.  

            LISPORT                                       
            LISPORT Modem status port for link command.  

            LIREADY                                                    
            LIREADY  Defines  a  function  which tests for a character
                available from modem when in link command.  

            LCDO                                              
            LCDO Test for carrier drop-out in link command.  

            LICHAR                                                     
            LICHAR Returns next character  from  modem  when  in  link


     YAM/XYAM                     Version 4.24                       Page 9


     Yam Implementation Manual  Revised 9-10-83                     Page 10


                command.  

            LOREADY                                                    
            LOREADY  Test  for  link  modem  ready  to  accept another
                character.  

            LOUT x                                                     
            LOUT(x) Macro outputs a character  to  modem  port  during
                link command.  

            LIBREAK                                                   
            LIBREAK Test for break from modem when in link command.  

            CLRLIBREAK                                         
            CLRLIBREAK Function to clear LIBREAK indication.  
                
          


     6  XYAM Differences  
     6. XYAM Differences 

          

                XYAM  is  produced  by  defining  XMODEM  in  the file
                'yamsys.h'.  Consult 'yamz89xm.h' and  'yamx.sub'  for
                an example.      Certain   #defines   are   especially
                applicable to XYAM: 
                

            RESTRICTED                                                 
            RESTRICTED Certain  commands  and  options  are  disabled.
                Filenames  with  '.BAD' extensions and files with $SYS
                or TAG2 bits set cannot be  opened.    They  will  not
                appear with DIR or DIRR commands.  
                
                A  file with extension of '.COM' will be uploaded with
                a '.OBJ'  extension.    Existing   files   cannot   be
                overwritten.   If  a  file  is received (r command) in
                error, it will be unlinked.  
                

            CDO                                                        
            CDO Define a test for carrier drop out so that  XYAM  will
                automatically exit T(erm) function when the connection 
                is broken.  
                

            BYEPROG                                                    
            BYEPROG  Bye,  O  and OFF commands chain to BYEPROG.COM if
                BYEPROG is defined (as a string).  For systems wishing 
                to use a BYE.COM to request comments.  
          


     7  Recent Revisions Enhancements to YAM  
     7. Recent Revisions/Enhancements to YAM 

 4.26x Converted to CI C86 syntax for CP/M 86 12-19-83 (Paul Homchick).
 4.26
 4.25
 4.24 Added chek command to Lattice and CC86 16 bit versions 8-25-83.  
 4.22 Minor changes to Jovemode 7-21-83.  
 4.21 Added Jovemode 7-18-83.  
 4.20 Changed uses of certain macros to  function  calls  to  conserve
          memory.  



     YAM/XYAM                     Version 4.24                      Page 10


     Yam Implementation Manual  Revised 9-10-83                     Page 11


 4.13 Changed crck command printout format.  Function init() now calls 
          chngport rather  than  setting  port values directly.  Hp125
          version checks for proper port number.  6-25-83 
 4.12 6-12-83 yam1.c default term file xmit mode name (as  printed  in
          ``s''   command)  changed  from  ``IMAGE''  (misleading)  to
          ``normal''.  
 4.11 6-9-83 chngport() in yam5.c return value now checked for  ERROR.
          (Seiko  version checks for valid port number.) Bug in CPM-86
          getfree() corrected.  
 4.08 5-30-83 Changes in yam7.c:  BDS  C  1.50a  broke  fopenaa  code.
          Fopenaa code removed and refrences changed to fappend in BDS 
          lib.  
 4.08  Changed  replot so screen is cleared whenever buffer pointer is
          backed up.   ESC  characters  are  counted  in  replot  line
          counting.  
 4.06  Corrected  yam3  and user manual re operation of w and p modes.
          The off command now dumps and closes any open files.  The  m
          command closes any send file before changing ports.  
 4.04 Fixed yam3 so Ctlview would indicate paritied characters.  Added 
          7-bit  mode  to  enable  file  transfers with Regulus and/or
          other brain damaged operating systems.    This  latest  frob
          requires  changes  to readline() and sendline() to work; see
          yam5.c (8 bit version).  Removed archive bit (Nof3) stuff to 
          conserve space on 8 bit versions.  Fixed view option problem 
          with 16 bit yam2.c.  Batch send now skips  over  files  that
          can't be opened, except for the first.  
 4.03 Fixed yam3 so CPMEOF is not sent in normal mode.  
 4.02 Added dump, sum, and wc commands to 16 bit versions.  
 4.01 Added extended file information to 16 bit versions.  
 3.53 Some changes in yam3.c for better replot displays with terminals 
          lacking STATLINE.  
 3.52 Added br (break) command and KBDBRK.  Yterm() now updates Lskcnt 
          so  the  replot will pgae back the same way whether yterm is
          in use.  This was accomplished by a change  in  the  calling
          sequence for yterm.  
 3.51 Added userexit code.  
 3.50 Added replot buffer search commands.  
 3.47  KBDNOW  define  added  to  force  keyboard  interrogation after
          displaying data (yam3).  Should only be used if  input  from
          modem is buffered or if high baud rates are not needed.  
 3.46 Clear status line after type/list command.  
 3.45  Removed spurious dumprxbuff in yam1 that caused loss of data if
          capture file was opened with partially full  buffer.    Also
          clear  status  line after s and r commands if file transfers
          successful.  VERSION now lives in yam1.  
 3.44 Name changes and typo corrections for portability.  
 3.43 Nlmode and  crmode  now  affect  file  xmsn  with  the  sendecho
          function as well as term.  
 3.42  inp()  and  outp() calls in yam3.c changed to equivalent macros
          for portability.   Disk  block  calculation  fixed  re  Paul
          Homchick.  
 3.41 Keyboard  excape  sequences buffered (see ESCCAL).  LOOPBACKNONO
          and u command removed.  
 3.39 Modem port selection has been moved from yam1 to yam5.    CISlen
          is no  longer  a  settable  parameter.    Low is no longer a
          settable parameter.   All  parameter  commands  now  take  a
          decimal number; this avoids problems encountered in previous 
          versions when  attempting  to set GOchar to colon.  FE sends


     YAM/XYAM                     Version 4.24                      Page 11


     Yam Implementation Manual  Revised 9-10-83                     Page 12


          an  ascii  file  to  computers  with  character  echo   (pip
          file=tty:).   A  bug  which  caused spurious XOFF to be sent
          when sending file  in  term  mode  has  been  fixed.    Z100
          version.  9-16-82 
 3.37  Increased  some  timeouts  in yam2.c for better operations with
          sluggish remotes.  9-1-82 
 3.35 NULL sends break in yam3 (was ^B^B). 8-28-82 
 3.34 Changed starting point of replot command and also speeded it  up
          by using externs.  8-1-82 
 3.33 Changed  yterm()  to assembly subroutine, p/o yam9.csm.  Changed
          yam8 to .csm format also.  Removed y command  (selection  is
          automatic).  7-31-82 
 3.31  Added  A  prefix,  LINKPORT,  and  completed Micro-Com autodial
          routine.  7-23-82 
 3.30 Added k  flag  for  1024  byte  block  FTP,  as  well  as  other
          improvements  to  yam2.c  7-11-82  Added y command, a faster
          subset of the t command.  Capture to file  now  ignores  CR,
          trnaslates LF   into   CR-LF   unless  image  mode.    Moved
          time-sensitive functions from yam7 to yam10, allowing memory 
          savings by not using -o on yam7.c.  
 3.29 Removed Join mode.  Added x command.   "Added"  TTYOUT,  MODOUT,
          and  LPOUT  macros (with argument) to reduce conditionals in
          YAM3.C and YAM7.C 6-26 
 3.28 Added FLIP for PMMI type modems.  The memory usage  change  made
          in  3.26  has  been  cleaned  up by use of a union to assure
          correct memory layout regardless of the compiler  used.    A
          yam5pmmi.c file for the pmmi modem now exists.  6-12-82 
 3.27 Changed autodial() function for CAFPERS. 6-11-82 
 3.26  Further  changes  to  aid  maintenance of different versions of
          yam.   Needs  BDS  C  1.46  to   compile   due   to   nested
          conditionals.  init() moved to yam7.c.  Memory usage changed 
          allowing larger buffer area.  
 3.25 NATHAN  defined.    CIS  protocol  entry  changed  to help error
          recovery.  5-31-82 
 3.24 Corrected usage of CLKMHZ 
 3.23 Official 8-bit version.  Added -, o mode (Onetrip),  and  Cislen
          parameter.  Jeff Martin's corrections added to manual.  
 3.22  Unofficial  Version. Includes CIS/MNET A file transfer protocol
          optional  with  yam4.c   (see   MYSYSTEM).   Changed   Cis02
          handling.   Changed  statline  in  yam2 to display number of
          characters received  in  kilobytes.    Some  coding  changes
          reflecting  awkward  sequences  discovered  while porting to
          CP/M-86 on IBM PC version.  
 3.20 New Base Version (for dif's).  Changed error printouts in  yam2.
          Documentation update.  
 3.19 J mode joins short lines when at less than column 40.  
 3.18  N  mode  now  prepends  \\r  to  \\n  when the term function is
          receiving a file.  1-1-82.  
 3.17 Added E parameter 12-19-81.  
 3.16 Setting Squelch (TS ES FS or DS) automatically sets  Dumping  to
          not  Squelch.  In  Twxmode  half duplex, transmitted file is
          copied to receive file (if open), and is  printed  if  print
          mode is on.  12-16-81.  
 3.15 Added  term  Q mode for TWX operations with ANSWERBACK.  Changed
          wcgetsec() logic so noise hits on the line before the  first
          sector  do  not  cause  a  speedup in the timeout parameter.
          12-14-81.  



     YAM/XYAM                     Version 4.24                      Page 12


     Yam Implementation Manual  Revised 9-10-83                     Page 13


 3.14 Added append option for receiving files,  replot  K  subcommand,
          changed  previous  K subcommand to Z. In N mode, keyboard CR
          is transmitted as NL. 12-11-81.  
 3.13 For non STATLINE, changed "Awaiting Pathname  NAK"  to  "+"  and
          "Awaiting initial NAK" "^".  
 3.12  Added  replot  X  and  K subcommands, changed type unsqueeze to
          avoid array overflow problems on long pathnames.  Added term 
          function break subcommand (requires  sendbrk()  function  in
          yam5.c).  11-5-81.  
 3.11  Added  Cis02  mode for Compuserve access, fixed logfile problem
          (first few files didn't show).  Tab expansion  fix  courtesy
          Jeff Martin (I thought it was the Z89!) 11-28-81.  
 3.10 Changed yam10.c to stop printout on ^Z in file 11-22-81.  
 3.09 Cosmetic change to type command in xyam.  11-17-81.  
 3.08   Added   USERINIT   option  useful  for  some  implementations.
          11-14-81.  
 3.07 Minor change to yam1.c  for  benefit  of  memory-mapped  systems
          11-11-81.  
 3.06 IOTYPE added for memory mapped systems List command now distinct 
          from type.  Cosmetic changes to opentx().  11-8-81.  
 3.05  Added  automatic  recognition  and  display  of squeezed files.
          Inclusion of the unsqueeze feature (#define USQ) may require 
          clink -r 800 11-7-81.  
 3.04 Added GOchar parameter, enhanced view mode 11-6-81.  
 3.03 Number of sectors and  xmsn  time  printed  when  opening  files
          11-5-81.  
 3.02 Xyam resets user number when exec'ing BYEPROG. 11-01-81.  
 3.01 Added INITBAUD. Your yam?????.h may need revision.  10-31-81.  
 3.00  Nomenclature  changed  to  facilitate differential file updates
          10-25-81.  
 2.34 Added era and NATHAN commands, O mode.  10-24-81.  
 2.33 Changed Unixish "FILE" to struct _buf in yam.h.  10-21-81.  
 2.32 Added BYEPROG define, deleted T, U, and W  commands  from  XYAM.
          10-18-81.  
 2.31  Corrected  tab  expansion  and  kbd XON XOFF handling in yam3.c
          10-17-81.  
 2.30 Supports CRC error  checking  option  compatible  with  XMODEM45
          10-15-81.  Chat function now in both yam/xyam.  
 2.24 Added  free  disk  space  report  on  a:  etc.  command, Upchuck
          function.  
 2.23 Added "crck" command.  



















     YAM/XYAM                     Version 4.24                      Page 13

